import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JDBC {
    public static void main(String[] args) throws SQLException {
        //第一步：建立数据库服务器的数据源,对数据库地址进行描述,找到Mysql数据库服务器地址。
        //DataSource是一个接口(Java语法中的接口)是用于找到数据库服务器地址(多种数据库)，MysqlDataSource这个类实现了这个接口
        //专门用于找到Mysql数据库服务器的地址，这里使用向上转型的原因是因为DataSource是所有数据库通用的数据源
        //当后期我们要修改使用的数据库时，只需要将代码中所有的MysqlDataSouce进行修改就行了，可以使改动代码的规模
        //减少到最小。
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java104?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("66666");

        //第二步：与数据库建立连接。
        //通过将创建好的dataSource数据源连接数据库，并返回连接结果信息
        Connection connection =dataSource.getConnection();
        System.out.println(connection);

        //第三步：构造SQL语句，当然只用一个字符串操作SQL语句是不行的，还需要搭配一个特殊的类来构造SQL语句
        //也就是PreparedStatement,通过connection储存的数据库服务器信息调用函数返回一条完整的可执行SQL语句储存在
        //statement变量中，PreparedStatement是Statement的子接口，表示预编译的 SQL 语句的对象，SQL 语句被预编译并存储在
        // PreparedStatement 对象中。
        String sql="create table jdbc(id varchar(20));";
        PreparedStatement statement=connection.prepareStatement(sql);
        int row=statement.executeUpdate();
        System.out.println("rows:"+row);

        //断开连接释放资源，先创建的后释放。
        statement.close();
        connection.close();
    }

}
